<?php

declare(strict_types=1);

namespace App\CustHub\Dto;

use App\Common\Dto\DataObject;

class AddMsgTemplateDto extends DataObject
{
    /**
     * 群发任务的类型，默认为single，表示发送给客户，group表示发送给客户群
     * @var string
     */
    public string $chat_type;

    /**
     * 客户的externaluserid列表
     *
     * 该字段仅在 `chat_type` 为 `single` 时有效，用于指定需要操作的客户列表。
     * 列表中的每个元素为客户的外部用户ID（externaluserid），最多可一次指定1万个客户。
     *
     * 示例：
     * [
     *     "woAJ2GCAAAXtWyujaWJHDDGi0mACAAAA",
     *     "wmqfasd1e1927831123109rBAAAA"
     * ]
     *
     * @var array
     */
    public array $external_userid = [];

    /**
     * 客户群id列表
     * 仅在chat_type为group时有效，最多可一次指定2000个客户群。指定群id之后，收到任务的群主无须再选择客户群
     * 仅对4.1.10及以上版本的企业微信终端生效
     *  示例：
     *  [
     *     "wr2GCAAAXtWyujaWJHDDGasdadAAA"
     *  ]
     * @var array
     */
    public array $chat_id_list = [];

    /**
     * 要进行群发的客户标签列表
     * 同组标签之间按或关系进行筛选，不同组标签按且关系筛选，每组最多指定100个标签，支持规则组标签
     * 示例：
     * {
     *    "group_list":
     *    [
     *      {
     *          "tag_list":["ete19278asuMT123109rBAAAA","ete19MT12278109UYteaBAAAA"]
     *      },
     *      {
     *          "tag_list":["eteIlKKHSDfuMT18Kg9rBAAAA"]
     *      }
     *    ]
     * }
     * @var array
     */
    public array $tag_filter = [];

    /**
     *  发送企业群发消息的成员userid
     *  当类型为发送给客户群时必填
     * @var string
     */
    public string $sender = '';

    /**
     * 是否允许成员在待发送客户列表中重新进行选择，默认为false
     * 仅支持客户群发场景
     * @var bool
     */
    public bool $allow_select = false;

    /**
     * 消息文本内容，最多4000个字节
     * 示例：
     * {
     *     "content": "文本消息内容"
     * }
     * @var array
     */
    public array $text = [];

    /**
     * 附件，最多支持添加9个附件
     * 示例：https://developer.work.weixin.qq.com/document/path/96366
     * @var array
     */
    public array $attachments = [];

    public function getChatType(): string
    {
        return $this->chat_type;
    }

    public function setChatType(string $chat_type): AddMsgTemplateDto
    {
        $this->chat_type = $chat_type;
        return $this;
    }

    public function getExternalUserid(): array
    {
        return $this->external_userid;
    }

    public function setExternalUserid(array $external_userid): AddMsgTemplateDto
    {
        $this->external_userid = $external_userid;
        return $this;
    }

    public function getChatIdList(): array
    {
        return $this->chat_id_list;
    }

    public function setChatIdList(array $chat_id_list): AddMsgTemplateDto
    {
        $this->chat_id_list = $chat_id_list;
        return $this;
    }

    public function getTagFilter(): array
    {
        return $this->tag_filter;
    }

    public function setTagFilter(array $tag_filter): AddMsgTemplateDto
    {
        $this->tag_filter = $tag_filter;
        return $this;
    }

    public function getSender(): string
    {
        return $this->sender;
    }

    public function setSender(string $sender): AddMsgTemplateDto
    {
        $this->sender = $sender;
        return $this;
    }

    public function isAllowSelect(): bool
    {
        return $this->allow_select;
    }

    public function setAllowSelect(bool $allow_select): AddMsgTemplateDto
    {
        $this->allow_select = $allow_select;
        return $this;
    }

    public function getText(): array
    {
        return $this->text;
    }

    public function setText(array $text): AddMsgTemplateDto
    {
        $this->text = $text;
        return $this;
    }

    public function getAttachments(): array
    {
        return $this->attachments;
    }

    public function setAttachments(array $attachments): AddMsgTemplateDto
    {
        $this->attachments = $attachments;
        return $this;
    }
}